package mx.ipn.escom.redes.equipo.model;

import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name ="empleado")
public class Empleado {
	
	private Integer idEmpleado;
	
	private String nombre;
	
	private String apellidoPaterno;
	
	private String apellidoMaterno;
	
	private Date fechaNacimiento;
	
	private String password;
	
	private String email;
	
	private Character sexo;
	
	private String direccion;
	
	private String idSupervisor;
	
	private Integer idDepartamento;
	
	private String puesto;
	
	private Departamento departamento;
	
	private Empleado supervisor;
	
	private List<Equipo> listEquipo;
	
	private Integer idPerfil;
	
	private Perfil perfil;

	/**
	 * @return the idEmpleado
	 */
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "idEmpleado", nullable = false)
	public Integer getIdEmpleado() {
		return idEmpleado;
	}

	/**
	 * @param idEmpleado the idEmpleado to set
	 */
	public void setIdEmpleado(Integer idEmpleado) {
		this.idEmpleado = idEmpleado;
	}

	/**
	 * @return the nombre
	 */
	@Column(name= "nombre", nullable = false)
	public String getNombre() {
		return nombre;
	}

	/**
	 * @param nombre the nombre to set
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	/**
	 * @return the apellidoPaterno
	 */
	@Column(name = "apellidoPaterno", nullable = false)
	public String getApellidoPaterno() {
		return apellidoPaterno;
	}

	/**
	 * @param apellidoPaterno the apellidoPaterno to set
	 */
	public void setApellidoPaterno(String apellidoPaterno) {
		this.apellidoPaterno = apellidoPaterno;
	}

	/**
	 * @return the apellidoMaterno
	 */
	@Column(name = "apellidoMaterno", nullable = false)
	public String getApellidoMaterno() {
		return apellidoMaterno;
	}

	/**
	 * @param apellidoMaterno the apellidoMaterno to set
	 */
	public void setApellidoMaterno(String apellidoMaterno) {
		this.apellidoMaterno = apellidoMaterno;
	}

	/**
	 * @return the fechaNacimiento
	 */
	@Column(name = "fechaNacimiento", nullable = false)
	public Date getFechaNacimiento() {
		return fechaNacimiento;
	}

	/**
	 * @param fechaNacimiento the fechaNacimiento to set
	 */
	public void setFechaNacimiento(Date fechaNacimiento) {
		this.fechaNacimiento = fechaNacimiento;
	}

	/**
	 * @return the password
	 */
	@Column(name = "password", nullable = false)
	public String getPassword() {
		return password;
	}

	/**
	 * @param password the password to set
	 */
	public void setPassword(String password) {
		this.password = password;
	}

	/**
	 * @return the email
	 */
	@Column(name = "email", nullable = false)
	public String getEmail() {
		return email;
	}

	/**
	 * @param email the email to set
	 */
	public void setEmail(String email) {
		this.email = email;
	}

	/**
	 * @return the sexo
	 */
	@Column(name = "sexo", nullable = false)
	public Character getSexo() {
		return sexo;
	}

	/**
	 * @param sexo the sexo to set
	 */
	public void setSexo(Character sexo) {
		this.sexo = sexo;
	}

	/**
	 * @return the direccion
	 */
	@Column(name = "direccion", nullable = true)
	public String getDireccion() {
		return direccion;
	}

	/**
	 * @param direccion the direccion to set
	 */
	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}

	/**
	 * @return the idSupervisor
	 */
	@Column(name = "idSupervisor", nullable = true)
	public String getIdSupervisor() {
		return idSupervisor;
	}

	/**
	 * @param idSupervisor the idSupervisor to set
	 */
	public void setIdSupervisor(String idSupervisor) {
		this.idSupervisor = idSupervisor;
	}

	/**
	 * @return the idDepartamento
	 */
	@Column(name = "idDepartamento", nullable = true)
	public Integer getIdDepartamento() {
		return idDepartamento;
	}

	/**
	 * @param idDepartamento the idDepartamento to set
	 */
	public void setIdDepartamento(Integer idDepartamento) {
		this.idDepartamento = idDepartamento;
	}

	/**
	 * @return the puesto
	 */
	@Column(name = "puesto", nullable = false)
	public String getPuesto() {
		return puesto;
	}

	/**
	 * @param puesto the puesto to set
	 */
	public void setPuesto(String puesto) {
		this.puesto = puesto;
	}

	/**
	 * @return the departamento
	 */
	@ManyToOne
	@JoinColumn(name = "idDepartamento", referencedColumnName = "idDepartamento", insertable = false, updatable = false)
	public Departamento getDepartamento() {
		return departamento;
	}

	/**
	 * @param departamento the departamento to set
	 */
	public void setDepartamento(Departamento departamento) {
		this.departamento = departamento;
	}

	/**
	 * @return the supervisor
	 */
	@ManyToOne
	@JoinColumn(name = "idSupervisor", referencedColumnName = "idEmpleado", insertable = false, updatable = false)
	public Empleado getSupervisor() {
		return supervisor;
	}

	/**
	 * @param supervisor the supervisor to set
	 */
	public void setSupervisor(Empleado supervisor) {
		this.supervisor = supervisor;
	}

	/**
	 * @return the listEquipo
	 */
	@ManyToMany(mappedBy = "listEmpleado")
	public List<Equipo> getListEquipo() {
		return listEquipo;
	}

	/**
	 * @param listEquipo the listEquipo to set
	 */
	public void setListEquipo(List<Equipo> listEquipo) {
		this.listEquipo = listEquipo;
	}

	/**
	 * @return the idPerfil
	 */
	@Column(name = "idPerfil")
	public Integer getIdPerfil() {
		return idPerfil;
	}

	/**
	 * @param idPerfil the idPerfil to set
	 */
	public void setIdPerfil(Integer idPerfil) {
		this.idPerfil = idPerfil;
	}

	/**
	 * @return the perfil
	 */
	@ManyToOne
	@JoinColumn(name="idPerfil", referencedColumnName="idPerfil", insertable = false, updatable = false)
	public Perfil getPerfil() {
		return perfil;
	}

	/**
	 * @param perfil the perfil to set
	 */
	public void setPerfil(Perfil perfil) {
		this.perfil = perfil;
	}

	
	
}
